Simulatore processore sEP8
Il processore sEP8 (Simple Educational Processor 8 bit) è un semplice processore a 8 bit, descritto nel libro Dalle porte AND OR NOT al sistema calcolatore del prof. Paolo Corsini e utilizzato nel corso per presentare i meccanismi fondamentali di un processore e la realizzazione dello stesso in hardware tramite il linguaggio Verilog. Oltre che a questi scopi didattici, è anche una buona base di partenza per esplorare architetture di processori e le loro implementazioni in hardware.
Nel repository https://github.com/Unipisa/sEP8 contiene codice utilizzabile per simulare il processore, sperimentarne estensioni etc.
Il codice attualmente presente nel repository è frutto del lavoro di Nicola Ramacciotti nell'ambito della sua Tesi di Laurea in Ingegneria Informatica, dal titolo "Design e implementazione di un ambiente di simulazione e testing in Verilog per il processore sEP8".
Siamo disponibili a seguire tesi triennali sull'argomento.
Lancio di simulazioni
Il codice sorgente fornito include tutto il necessario per simulare l'architettura sEP8 e osservare il suo comportamento interno durante l'esecuzione di un semplice programma.
> iverilog -o sEP8 .\sEP8.v .\MEMORIA.v .\RAM.v .\ROM.v .\IO.v .\clock_generator.v .\testbench.v
> vvp ./sEP8
VCD info: dumpfile waveform.vcd opened for output.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Simulazione terminata: il processore ha eseguito un'istruzione HLT
I caratteri che vediamo stampati (da A
a Z
) sono l'output del programma contenuto in ROM.v
.
Dal file waveform.vcd
, possiamo studiare il comportamento del processore.
Caricamento di programmi tramite ROM
In questo simulatore, il programma da eseguire è caricato tramite un modulo ROM
, che viene montato a partire dall'indirizzo 24'hFF0000
.
Tale modulo dovrà contenere le sequenze di byte corrispondenti alle istruzioni del programma.
Un assemblatore basilare è fornito come script python, che traduce semplici programmi assembler per questo processore in un modulo ROM
contenente la giusta sequenza di byte.
Riferimenti storici: le cartucce
Questo modo di caricare i programmi non è solo una semplificazione a scopo didattico, ma ha anche degli esempi storici concreti.
Infatti operavano così le prime console, dove gli esempi più famosi sono probabilmente le console Nintendo come N64 e GameBoy. In queste console, ciascun gioco è fornito come una cartuccia che va inserita nella console prima di accenderla. Ciascuna cartuccia è del vero e proprio hardware che contiene la ROM dentro la quale è scritto il programma del gioco, e i pin che collegano la cartuccia e la console sono proprio fili di indirizzamento e dati.
In realtà, permettendo generiche letture e scritture al range di indirizzi a cui è montata la cartuccia, questa poteva contenere diversi tipi di hardware, inclusi chip di RAM aggiuntivi, chip di memoria per permettere di salvare il gioco, o ancora hardware dedicato come rumble pak o fotocamera.